/********************************Copyright (c)**********************************\
**
**                   (c) Copyright 2025, Main, China, QD.
**                           All Rights Reserved
**
**                                By(wo4fisher)
**                           http://www.wo4fisher.com
**
**----------------------------------文件信息------------------------------------
** 文件名称: ringBuf.h
** 创建人员: wht
** 创建日期: 2025-08-15
** 文档描述: 
**
**----------------------------------版本信息------------------------------------
** 版本代号: V0.1
** 版本说明: 初始版本
**
**------------------------------------------------------------------------------
\********************************End of Head************************************/
 
#ifndef __RING_BUF_H_
#define __RING_BUF_H_
#ifndef RING_BUFFER_H
#define RING_BUFFER_H

#include <stdint.h>
#include "main.h"
#include "usart.h"
#include "dma.h"

// 循环缓冲区大小
#define RING_BUFFER_SIZE 40

// 循环缓冲区结构
typedef struct {
    uint8_t buffer[RING_BUFFER_SIZE];
    volatile uint16_t head;     // 写入位置
    volatile uint16_t tail;     // 读取位置
    volatile uint16_t count;    // 当前数据量
} ring_buffer_t;

// 协议类型定义
typedef enum {
    PROTOCOL_UNKNOWN = 0,
    PROTOCOL_TYPE1,     // 第一种协议
    PROTOCOL_TYPE2,     // 第二种协议
    PROTOCOL_TYPE3      // 第三种协议
} protocol_type_t;

// 协议解析结果结构
typedef struct {
    protocol_type_t protocol_type;
    uint8_t *data_ptr;
    uint16_t data_length;
} protocol_result_t;

// 帧头定义（根据实际协议修改）
#define PROTOCOL1_HEADER 0x5D
#define PROTOCOL2_HEADER 0xBB
#define PROTOCOL3_HEADER 0xCC

// 循环缓冲区函数声明
void ring_buffer_init(ring_buffer_t *rb);
uint8_t ring_buffer_is_empty(ring_buffer_t *rb);
uint8_t ring_buffer_is_full(ring_buffer_t *rb);
uint8_t ring_buffer_write(ring_buffer_t *rb, uint8_t data);
uint8_t ring_buffer_read(ring_buffer_t *rb, uint8_t *data);
uint16_t ring_buffer_read_multi(ring_buffer_t *rb, uint8_t *data, uint16_t length);
uint8_t ring_buffer_peek(ring_buffer_t *rb, uint16_t index, uint8_t *data);
uint16_t ring_buffer_available(ring_buffer_t *rb);

// 协议解析函数声明
protocol_type_t parse_protocol_type(uint8_t header);
protocol_type_t parse_protocol_data(ring_buffer_t *rb, protocol_result_t *result);
protocol_type_t parse_protocol_safe(ring_buffer_t *rb, uint8_t *data_buffer, 
                                   uint16_t buffer_size, protocol_result_t *result);

// 协议处理函数声明
void process_protocol_type1(uint8_t *data, uint16_t length);
void process_protocol_type2(uint8_t *data, uint16_t length);
void process_protocol_type3(uint8_t *data, uint16_t length);
void data_processing_task(void);
void communication_init(void);

// 外部全局变量声明
extern volatile ring_buffer_t uart_buffer;

#endif // RING_BUFFER_H

#endif

 
/********************************End of File************************************/